//
//  FXStatusListViewModel.swift
//  微博(Swift)
//
//  Created by V on 16/1/2.
//  Copyright © 2016年 V. All rights reserved.
//

import UIKit
import SDWebImage


class FXStatusListViewModel: NSObject {
    
    var statuses: [FXStatusViewModel]?
    
    func loadData(isPullUp: Bool, complation: (isSuccessed: Bool)->()){
        // 判断是否是上啦加载，如果是，就拼装maxID
        var maxId: Int64 = 0
        var sinceId: Int64 = 0
        // 判断是否是上啦刷新
        if isPullUp {
            maxId = statuses?.last?.status?.id ?? 0
            // 加载比这一条早的数据
            maxId -= 1
        }else {
            // 下啦加载
            sinceId = statuses?.first?.status?.id ?? 0
            // print("下啦加载")
            // print(sinceId)
        }
        
//        let urlString = "https://api.weibo.com/2/statuses/friends_timeline.json"
//        // 刷新数据发送请求需要的参数
//        let params = [
//            "access_token": FXUserAccountViewModel.sharedViewModel.accessToken!,
//            "max_id": "\(maxId)",
//            "since_id": "\(sinceId)"
//        ]
        // 发送请求
        FXNetworkTools.sharedTool.loadStatuses(maxId, sinceId: sinceId) { (response, error) -> () in
            // print(response)
            if error != nil{
                print(error)
                complation(isSuccessed: false)
            }
            guard let responseDict = response as? [String: NSObject] else {
                complation(isSuccessed: false)
                print("response 返回的不是字典")
                return
            }
            
            // 如果代码执行到这里，说明：response 不为空，并且 response 是字典，说明获得到了 服务器响应，得到了需要的数据。把得到的数据通过字典转模型进行管理，方便以后调用
            // statuses 通过官方文档得到 是数组，需要的是 statuses 字典中的数据，在此对 statuses 进行字典转模型
            // print(response)
            let statusesDict = responseDict["statuses"] as! [[String: AnyObject]]
            var tempArray: [FXStatusViewModel] = [FXStatusViewModel]()
            for dict in statusesDict {
                // status 为模型
                let statusViewModel = FXStatusViewModel()
                statusViewModel.status = FXStatus(dict: dict)
                tempArray.append(statusViewModel)
            }
            // 给属性赋值
            if self.statuses == nil {
                self.statuses = [FXStatusViewModel]()
            }
            // 判断是上啦刷新还是下啦加载
            if isPullUp {
                self.statuses! += tempArray
            }else {
                print(self.statuses)
                // 用第一句话，则加载出来的数据在 tempArray的后边，刷新数据后，新数据放到了最后边。
                // self.statuses! += tempArray
                self.statuses = tempArray + self.statuses!
                print(self.statuses)
                print("下拉刷新出\(tempArray.count)条数据")
            }
            
            // 缓存单张图片
            self.cacheSingleImage(tempArray, complation: complation)
            // 到这里说明 数据获取完成
            //刷新数据
//            complation(isSuccessed: true)
        }
    }
    
    
    
    
    
    // 缓存单张图片
    private func cacheSingleImage(dataArray: [FXStatusViewModel], complation: (isSuccessed: Bool)->()){
        var dataLength = 0
        // 遍历 dataArray 如果有单张图片就进行缓存
        let group = dispatch_group_create()
        for viewModel in dataArray {
            if viewModel.picUrls?.count != 1{
                // 不执行任何操作，继续下一次循环
                continue
            }
            // 取出只有一张的图片 进行缓存
            let urlString = viewModel.picUrls!.first!.thumbnail_pic!
            let url = NSURL(string: urlString)
            dispatch_group_enter(group)
            SDWebImageManager.sharedManager().downloadImageWithURL(url, options: [], progress: nil, completed: { (image, error, _, _, _) -> Void in
                if image != nil{
                    // 计算当前下载图片的大小
                    dataLength += UIImagePNGRepresentation(image)!.length
                    // print("dataLength=\(dataLength / 1024)")
                }
                dispatch_group_leave(group)
            })
        }
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            // print("所有的图片都已经下载完成。缓存的图片总大小是：\(dataLength / 1024)kb")
            // 刷新界面
            complation(isSuccessed: true)
        }
    }
    
    

}
